//package com.demo.test.other;
//
//import com.whaty.core.commons.cache.service.CacheService;
//import com.whaty.core.commons.datasource.MasterSlaveRoutingDataSource;
//import com.whaty.dao.MyGeneralDao;
//import com.whaty.framework.common.spring.SpringUtil;
//import com.whaty.platform.entity.web.action.impl.MyGridServiceImpl;
//import com.whaty.platform.entity.web.action.newtrain.dataStatistics.OrganTreeService;
//import com.whaty.platform.util.Const;
//import com.whaty.util.ModifyDatasource;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.collections.CollectionUtils;
//import org.apache.commons.collections.map.HashedMap;
//import org.apache.commons.lang.StringUtils;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.ArrayList;
//import java.util.HashSet;
//import java.util.List;
//

//@Service
//@Slf4j
//public class OrganDataStatisticsUtilsServiceImpl extends MyGridServiceImpl implements OrganTreeService  {
//
//
//    @Resource(
//            name = "core_cacheService"
//    )
//    private CacheService cacheService;
//
//    @Resource(name = "myGeneralDao")
//    private MyGeneralDao myGeneralDao;
//
//
//    private static final String FATHER_ORGAN_PREFIX = "fatherOrgan-";
//
//    private static final String CHILDREN_ORGAN_PREFIX = "childrenOrgan-";
//
//    private static final String TOTAL_ORGAN_PREFIX = "totalOrgan-";
//
//
//
//    @Override
//    public List<String> getAllOrganIds(String siteId) {
//        if (null == cacheService) {
//            // 处理 generalDao 为空的情况
//            cacheService = (CacheService) SpringUtil.getBean("core_cacheService");
//        }
//        String cacheKey = TOTAL_ORGAN_PREFIX+siteId;
//        Object objList = cacheService.get(cacheKey);
//        if(objList != null){
//            return (List<String>) objList;
//        }else{
//            String backType = MasterSlaveRoutingDataSource.getDbType();
//            MasterSlaveRoutingDataSource.setDbType(ModifyDatasource.DATASOURCE_DEFAULT);
//            try {
//                String sql = "select distinct po.Id as organId\n" +
//                        "from pe_organ po\n" +
//                        "         left join pe_site ps on po.fk_site_id = ps.ID\n" +
//                        "where ps.id = '" + siteId + "' ";
//                List bySQL = this.myGeneralDao.getBySQL(sql);
//                if (CollectionUtils.isNotEmpty(bySQL)) {
//                    cacheService.put(cacheKey,bySQL,60*60);
//                    return bySQL;
//                }
//            }catch (Exception e){
//                logger.error("catch exception", e);
//            }finally {
//                MasterSlaveRoutingDataSource.setDbType(backType);
//            }
//        }
//
//
//        return null;
//    }
//
//    /**
//     * 获取本机及其子机构
//     * @param siteId
//     * @param organId
//     * @return
//     */
//    @Override
//    public List<String> getAllLowerLevelOrganIds(String siteId, String organId) {
//        if (null == cacheService) {
//            // 处理 generalDao 为空的情况
//            cacheService = (CacheService) SpringUtil.getBean("core_cacheService");
//        }
//        String cacheKey = CHILDREN_ORGAN_PREFIX+siteId+"-"+organId;
//        Object objList = cacheService.get(cacheKey);
//        if(objList != null){
//            return (List<String>) objList;
//        }else{
//            HashSet<String> organIds = new HashSet<>();
//            organIds.add(organId);
//            getAllLowerLevelOrganIdsUtils(siteId,organId, organIds);
//            if(CollectionUtils.isNotEmpty(organIds)){
//                List<String> list = new ArrayList<>();
//                list.addAll(organIds);
//                cacheService.put(cacheKey,list,60*60);
//                return list;
//            }
//        }
//
//        return null;
//    }
//
//    /**
//     * 获取本级及其上级机构集合
//     * @param siteId
//     * @param organId
//     * @return
//     */
//    @Override
//    public List<String> getAllHighLevelOrganIds(String siteId, String organId) {
//        if (null == cacheService) {
//            // 处理 generalDao 为空的情况
//            cacheService = (CacheService) SpringUtil.getBean("core_cacheService");
//        }
//        String cacheKey = FATHER_ORGAN_PREFIX+siteId+"-"+organId;
//        Object objList = cacheService.get(cacheKey);
//        if(objList != null){
//            return (List<String>) objList;
//        }else{
//            HashSet<String> organIds = new HashSet<>();
//            organIds.add(organId);
//            getAllHighLevelOrganIdsUtils(siteId,organId, organIds);
//            if(CollectionUtils.isNotEmpty(organIds)){
//                List<String> list = new ArrayList<>();
//                list.addAll(organIds);
//                cacheService.put(cacheKey,list,60*60);
//                return list;
//            }
//        }
//
//
//        return null;
//    }
//
//    @Override
//    public List<String> getTraineeOrganId(List<String> traineeIdList, String siteId) {
//        if(CollectionUtils.isNotEmpty(traineeIdList)){
//            String backType = MasterSlaveRoutingDataSource.getDbType();
//            MasterSlaveRoutingDataSource.setDbType(ModifyDatasource.DATASOURCE_DEFAULT);
//            try {
//                if (null == myGeneralDao) {
//                    // 处理 generalDao 为空的情况
//                    myGeneralDao = (MyGeneralDao) SpringUtil.getBean("myGeneralDao");
//                }
//                String sql = "select distinct po.id from pe_trainee pt join pe_organ po on po.id = pt.FK_ORGAN_ID and pt.FK_SITE_ID = '"+siteId+"' and pt.id "+ Const.madeSqlIn(traineeIdList,"");
//                return myGeneralDao.getBySQL(sql);
//
//            } catch (Exception e) {
//                logger.error("catch exception", e);
//            } finally {
//                MasterSlaveRoutingDataSource.setDbType(backType);
//            }
//        }
//
//        return null;
//    }
//
//    @Override
//    public List<String> getAllClassTraineeOrganId(String classId, String siteId) {
//        if(StringUtils.isNotBlank(classId) && StringUtils.isNotBlank(siteId)){
//            String backType = MasterSlaveRoutingDataSource.getDbType();
//            MasterSlaveRoutingDataSource.setDbType(ModifyDatasource.DATASOURCE_DEFAULT);
//            try {
//                if (null == myGeneralDao) {
//                    // 处理 generalDao 为空的情况
//                    myGeneralDao = (MyGeneralDao) SpringUtil.getBean("myGeneralDao");
//                }
//                String sql = "select distinct po.id from pr_class_trainee pct join  pe_trainee pt on pt.id = pct.fk_trainee_id join pe_organ po on po.id = pt.FK_ORGAN_ID where  pt.FK_SITE_ID = '"+siteId+"' and   pct.FK_TRAINING_CLASS_ID = '"+classId+"' ;";
//                return myGeneralDao.getBySQL(sql);
//
//            } catch (Exception e) {
//                logger.error("catch exception", e);
//            } finally {
//                MasterSlaveRoutingDataSource.setDbType(backType);
//            }
//        }
//
//        return null;
//    }
//
//    /**
//     * 递归去查询当前机构及其子机构
//     *
//     * @param organId
//     * @param organList
//     * @return
//     */
//    private HashSet<String> getAllLowerLevelOrganIdsUtils(String siteId,String organId, HashSet<String> organList) {
//        String backType = MasterSlaveRoutingDataSource.getDbType();
//        MasterSlaveRoutingDataSource.setDbType(ModifyDatasource.DATASOURCE_DEFAULT);
//        try {
//            if (null == myGeneralDao) {
//                // 处理 generalDao 为空的情况
//                myGeneralDao = (MyGeneralDao) SpringUtil.getBean("myGeneralDao");
//            }
//            if (StringUtils.isNotEmpty(organId)) {
//                String sql = "SELECT ID FROM pe_organ WHERE FK_PARENT_ID = '" + organId + "' and FK_SITE_ID = '"+siteId+"' ";
//                List<String> list = this.myGeneralDao.getBySQL(sql, new HashedMap());
//                if (list != null && list.size() > 0) {
//                    for (String id : list) {
//                        if(StringUtils.isNotEmpty(id)){
//                            organList.add(id);
//                            getAllLowerLevelOrganIdsUtils(siteId,id, organList);
//                        }
//                    }
//                }
//            }
//        } catch (Exception e) {
//            logger.error("catch exception", e);
//        } finally {
//            MasterSlaveRoutingDataSource.setDbType(backType);
//        }
//        return organList;
//    }
//
//    /**
//     * 递归去查询当前机构及其子机构
//     *
//     * @param organId
//     * @param organList
//     * @return
//     */
//    private HashSet<String> getAllHighLevelOrganIdsUtils(String siteId,String organId, HashSet<String> organList) {
//        String backType = MasterSlaveRoutingDataSource.getDbType();
//        MasterSlaveRoutingDataSource.setDbType(ModifyDatasource.DATASOURCE_DEFAULT);
//        try {
//            if (null == myGeneralDao) {
//                // 处理 generalDao 为空的情况
//                myGeneralDao = (MyGeneralDao) SpringUtil.getBean("myGeneralDao");
//            }
//            if (StringUtils.isNotEmpty(organId)) {
//                String sql = " select po2.Id " +
//                        " from pe_organ po " +
//                        "         left join pe_organ po2 on po.FK_PARENT_ID = po2.Id " +
//                        " where po.id = '"+organId+"' " +
//                        " and po.fk_site_id = '"+siteId+"' ";
//                List<String> list = this.myGeneralDao.getBySQL(sql, new HashedMap());
//                if (list != null && list.size() > 0) {
//                    for (String id : list) {
//                        if(StringUtils.isNotEmpty(id)){
//                            organList.add(id);
//                            getAllHighLevelOrganIdsUtils(siteId,id, organList);
//                        }
//                    }
//                }
//            }
//        } catch (Exception e) {
//            logger.error("catch exception", e);
//        } finally {
//            MasterSlaveRoutingDataSource.setDbType(backType);
//        }
//        return organList;
//    }
//
//}
